from langchain_core.tools import ToolException, StructuredTool

"""
Tool的异常处理
"""


def get_weather(city: str) -> int:
    """获取给定城市的天气"""
    raise ToolException(f"错误：没有名为{city}的城市")


def _handle_error(error: ToolException) -> str:
    return f"工具执行时间发生以下错误：`{error.args[0]}`"


get_weather_tool = StructuredTool.from_function(
    func=get_weather,
    # (1)默认情况下，如果函数抛出ToolException，则将ToolException的message作为响应
    # handle_tool_error=True,#(2) 如果设置为True，则将返回ToolException异常文本，False将会抛出 整个异常的堆栈
    # handle_tool_error=f"错误：没有名为的城市", ##(3) 错误信息直接写死成一个字符串。
    handle_tool_error=_handle_error,

)

response = get_weather_tool.invoke({"city": "foobar"})
print(response)
